package util

import (
	"fmt"
	"io/ioutil"
	"os"
)

//PathExists 判断一个文件或文件夹是否存在
//输入文件路径，根据返回的bool值来判断文件或文件夹是否存在
func PathExists(path string) (bool, string) {
	if len(path) == 0 {
		return false, "path 不能为空"
	}
	_, err := os.Stat(path)
	if err == nil {
		return true, "存在"
	}
	if os.IsNotExist(err) {
		return false, "path路径文件不存在"
	}
	return false, "path路径文件不存在"
}

func ReadFileToStr(path string) string {
	content, err := ioutil.ReadFile(path)
	if err != nil {
		fmt.Println("read file failed, err:", err)
		return ""
	}
	return string(content)
}

func GenFile(str, path string) {
	file, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
	if err != nil {
		fmt.Println("open file failed, err:", err)
		return
	}
	defer file.Close()
	file.Write([]byte(str)) //写入字节切片数据
	//file.WriteString("hello go") //直接写入字符串数据
}

func TestGenFile(path, enPath, dePath string) {
	strContent := ReadFileToStr(path)
	Encrypt, _ := AesEcpt.AesBase64Encrypt(strContent)
	GenFile(Encrypt, enPath)
	//fmt.Printf("Encrypt: %v\n", Encrypt)
	Decrypt, _ := AesEcpt.AesBase64Decrypt(Encrypt)
	GenFile(Decrypt, dePath)
	//fmt.Printf("Decrypt: %v\n", Decrypt)
	fmt.Printf("明文长度: %v\n解密后长度: %v\n", len(strContent), len(Decrypt))
}

func EnFile(path string) {
	EnFileToOutPath(path, path)
}
func EnFileToOutPath(path, outPath string) {
	strContent := ReadFileToStr(path)
	Encrypt, _ := AesEcpt.AesBase64Encrypt(strContent)
	GenFile(Encrypt, outPath)
}
func DeFile(path string) {
	DeFileToOutPath(path, path)
}
func DeFileToOutPath(path string, outPath string) {
	strContent := ReadFileToStr(path)
	Decrypt, _ := AesEcpt.AesBase64Decrypt(strContent)
	GenFile(Decrypt, outPath)
}
